home *** CD-ROM | disk | FTP | other *** search
- #include <Quickdraw.h>
- #include <Windows.h>
- #include <dialogs.h>
- #include <Files.h>
- #include <StandardFile.h>
- #include <OSEvents.h>
- #include <Memory.h>
- #include <Sound.h>
- #include <SoundInput.h>
- #include <OSUtils.h>
-
- #define TRUE 0xFF
- #define FALSE 0
-
- typedef struct {
- short OnOff;
- short Level;
- } Level;
-
- pascal void MyRecComp (SPBPtr inParamPtr);
-
-
- #ifdef powerc
- QDGlobals qd;
- #endif
-
- main()
- {
- Point where = {20,20};
- SFReply reply;
- short SomeRefNum;
- Level myLevel;
- OSErr err;
- SPBPtr RecordRec;
- long SoundRefNum;
- long totalMilRecord;
- ParmBlkPtr paramBlock;
- SICompletionUPP mySICompletionUPP;
-
-
-
- InitGraf(&qd.thePort);
- FlushEvents(everyEvent, 0);
- InitWindows();
- InitDialogs(nil);
- InitCursor();
-
- SFGetFile (where, "\p", nil, -1, nil, nil, &reply);
- err = FSOpen(reply.fName, reply.vRefNum, &SomeRefNum);
- if (err != noErr)
- Debugger();
-
- err = SetupAIFFHeader (SomeRefNum, 1, 0x56EE8BA3, 8, 'NONE', 0, 0);
- if (err != noErr)
- Debugger();
-
- err = SPBOpenDevice (nil, siWritePermission, &SoundRefNum);
- if (err != noErr)
- Debugger();
-
- myLevel.OnOff = 1;
- myLevel.Level = 0;
- err = SPBSetDeviceInfo (SoundRefNum,siTwosComplementOnOff, (Ptr) &myLevel);
- if (err != noErr)
- Debugger();
-
- RecordRec = (SPBPtr) NewPtr(sizeof (SPB));
- if (MemError() != noErr || RecordRec == nil)
- Debugger();
-
- /* create a SICompletionUPP */
- mySICompletionUPP = NewSICompletionProc(MyRecComp);
-
- RecordRec->inRefNum = SoundRefNum;
- RecordRec->count = 0;
- RecordRec->milliseconds = 15000;
- RecordRec->bufferLength = 0;
- RecordRec->bufferPtr = nil;
- RecordRec->completionRoutine = mySICompletionUPP;
- RecordRec->interruptRoutine = nil;
- RecordRec->userLong = 0;
- RecordRec->error = 0;
- RecordRec->unused1 = 0;
-
- err = SPBRecordToFile (SomeRefNum, RecordRec, TRUE);
- if (err != noErr)
- Debugger();
-
- do {
- } while (RecordRec->userLong == 0);
-
- totalMilRecord = 15000;
-
- err = SPBMillisecondsToBytes(SoundRefNum, &totalMilRecord);
- if (err != noErr)
- Debugger();
-
- paramBlock = (ParmBlkPtr) NewPtr(sizeof (IOParam));
- if (MemError() != noErr || paramBlock == nil)
- Debugger();
-
- paramBlock->ioParam.ioRefNum = SomeRefNum;
- paramBlock->ioParam.ioPosMode = 1;
- paramBlock->ioParam.ioPosOffset = 0;
-
- err = PBSetFPos(paramBlock, FALSE);
- if (err != noErr)
- Debugger();
-
- err = SetupAIFFHeader (SomeRefNum, 1, 0x56EE8BA3, 8, 'NONE', totalMilRecord, 0);
- if (err != noErr)
- Debugger();
-
- SPBCloseDevice (SoundRefNum);
-
- DisposePtr ((Ptr) RecordRec);
-
- err = SndStartFilePlay (nil, SomeRefNum, 0, 74000, nil, nil, nil, FALSE);
- if (err != noErr)
- Debugger();
-
- FSClose (SomeRefNum);
-
- DisposeRoutineDescriptor(mySICompletionUPP);
- }
- /**********************************/
-
- pascal void MyRecComp (SPBPtr inParamPtr)
- {
- inParamPtr->userLong = 1;
-
- return;
- }
-
- /**********************************/
-